﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML><HEAD><TITLE>ControlGetFocus</TITLE>
<META http-equiv=Content-Type content="text/html; charset=UTF-8"><LINK 
href="../css/commands.css" type=text/css rel=stylesheet><LINK media=print 
href="../css/print.css" type=text/css rel=stylesheet>
<META content="MSHTML 6.00.6000.16674" name=GENERATOR></HEAD>
<BODY>
<H1>ControlGetFocus</H1>


<P>检索目标窗口的哪个控件有输入焦点，若有的话。</P>
<P class=CommandSyntax>ControlGetFocus, OutputVar [, WinTitle, WinText, 
ExcludeTitle, ExcludeText]</P>
<h3>参数 </h3>
<TABLE borderColor=#c0c0c0 cellSpacing=0 cellPadding=3 width="100%" border=1>
  <TBODY>
  <TR>
    <TD width="15%">OutputVar</TD>
    <TD width="85%">
      <P>存储控件标识符的变量名称，控件标识符在它的父窗口里由它的类名跟序号组成，例如 Button12 。</P></TD></TR>
  <TR>
    <TD>WinTitle</TD>
    <TD>目标窗口的标题或副标题 (通过 <A 
      href="SetTitleMatchMode.htm">SetTitleMatchMode</A>&nbsp;定义匹配行为)。如果此参数和后面的3个参数被省略，<A 
      href="../LastFoundWindow.htm">最近找到的窗口</A> 将被使用。如果此参数是字母 A 
      并且后面的3个参数被省略，活动的窗口将被使用。要使用一个窗口类，指定 ahk_class 确切的类名 (通过Window Spy显示)。要使用一个 
      <A href="Process.htm">process 标识符 (PID)</A>，指定 ahk_pid %包含PID的变量% 。要使用一个 
      <A href="GroupAdd.htm">窗口组</A>&nbsp;，指定 ahk_group 组名。要使用一个窗口的 <A 
      href="WinGet.htm">unique ID 编号</A>&nbsp;，指定 ahk_id %包含ID的变量% 。通过指定 <A 
      href="../LastFoundWindow.htm#multi">多个条件</A>&nbsp;缩小搜索范围。例如： <EM>My 
      File.txt ahk_class Notepad</EM></TD></TR>
  <TR>
    <TD>WinText</TD>
    <TD>如果出现，此参数必须是目标窗口的一个单独文本对象的子字串(像内置的Window Spy工具显示的一样)。如果 <A 
      href="DetectHiddenText.htm">DetectHiddenText</A> 是 ON 
  的状态，隐藏的文本对象将被探测。</TD></TR>
  <TR>
    <TD>ExcludeTitle</TD>
    <TD>标题包括此参数值的窗口将不被考虑。</TD></TR>
  <TR>
    <TD>ExcludeText</TD>
    <TD>文本包括此参数值的窗口将不被考虑。</TD></TR></TBODY></TABLE>
<h3>ErrorLevel</h3>
<P>如果带输入焦点的控件被成功地检索到，<A href="../misc/ErrorLevel.htm">ErrorLevel</A> 将设为 
0&nbsp;。否则设为 1&nbsp;(例如目标窗口不存在或者它没有控件带输入焦点) 。</P>
<h3>注意</h3>
<P>被此命令检索到的控件是带键盘焦点的，也就是说，如果用户去键入任意内容，那控件将收到键击。</P>
<P>目标窗口必须被激活才获得一个焦点控件。如果窗口未激活，<EM>OutputVar</EM> 将为空。</P>
<P>如果 ControlGetFocus 以一个高频率(例如每 500 ms 一次或更快)重复地执行，它将可能扰乱用户的双击能力。一个应对方案是通过 <A 
href="DllCall.htm">DllCall</A>&nbsp;调用操作系统的 GetGUIThreadInfo() 。例如：</P><PRE><SPAN class=CodeCom>; 此脚本检索激活窗口焦点控件的 ahk_id (HWND) 。</SPAN>
<SPAN class=CodeCom>; 此脚本需要 Windows 98 或者 NT 4.0 SP3+，或近期其他系统。</SPAN>
GuiThreadInfoSize = 48
VarSetCapacity(GuiThreadInfo, GuiThreadInfoSize)
<A href="../Functions.htm#NumPut">NumPut</A>(GuiThreadInfoSize, GuiThreadInfo, 0)
if not DllCall("GetGUIThreadInfo", uint, 0, str, GuiThreadInfo)
{
    MsgBox GetGUIThreadInfo() indicated a failure.
    return
}
FocusedHWND := <A href="../Functions.htm#NumGet">NumGet</A>(GuiThreadInfo, 12)  <SPAN class=CodeCom>; 从结构体检索 hwnd焦点区域。</SPAN>
MsgBox % "The focused control's ahk_id (HWND) is " . FocusedHWND
<SPAN class=CodeCom>; 此 ID 能被所有控件命令使用。例如：</SPAN>
<SPAN class=CodeCom>; ControlGetText, OutputVar,, ahk_id %FocusedHWND%</SPAN></PRE>
<P>窗口标题和文本是区分大小写的。隐藏的窗口将不被探测，除非已打开 <A 
href="DetectHiddenWindows.htm">DetectHiddenWindows</A> 。</P>
<h3>相关命令</h3>
<P><A href="ControlFocus.htm">ControlFocus</A>, <A 
href="ControlMove.htm">ControlMove</A>, <A 
href="ControlClick.htm">ControlClick</A>, <A 
href="ControlGetText.htm">ControlGetText</A>, <A 
href="ControlSetText.htm">ControlSetText</A>, <A 
href="ControlSend.htm">ControlSend</A> </P>
<h3>示例</h3><PRE class=NoIndent>ControlGetFocus, OutputVar, 无标题 - 记事本
if ErrorLevel
    MsgBox, 目标窗口不存在或者它没有控件带输入焦点。
else
    MsgBox, 带焦点的控件 = %OutputVar%</PRE>
</BODY></HTML>
